﻿using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Script.Serialization;
using Traviesuras.Models;

namespace Traviesuras.Controllers
{
    public class DocController : Controller
    {
        //
        // GET: /Doc/
        
        public ActionResult Index()
        {
            if (Session["usuario"] == null)
                return this.RedirectToAction("Sesion", "Login");
            if(((List<clsMenu>)Session["menu"]).Find(q => q.direccion == "/doc/index")==null )
                return null;
            
            clsDocumento_cab cls = new clsDocumento_cab();
            cls.lstProd = clsAccesoDB.ConsultaProducto().Where(q=>q.estado!="I").ToList();
            cls.JScombo = clsConfiguracion.JsonString(clsAccesoDB.ConsultaProductoCombo(), true);
            cls.lstPersona = clsAccesoDB.ConsultaPersona();

            return View(cls);
        }
        static void Swap<T>(ref T lhs, ref T rhs)
        {
            T temp;
            temp = lhs;
            lhs = rhs;
            rhs = temp;
        }
        public decimal Precio(int id) 
        {
            return clsAccesoDB.ConsultaProducto().Where(q => q.id_producto == id).First().precio;
        }
        public ActionResult Editar(string s)
        {
            clsDocumento_det cls = new clsDocumento_det();
            return View(cls);
        }
        public string GuardarCab(int idcabecera, string coddocumento, DateTime fecha,string descripcion, string idcliente, string nombre, string email, string telefono, string direccion, decimal subtotal, decimal descuento, decimal iva, decimal total)
        {
            string msg = "";
            clsDocumento_cab cls = new clsDocumento_cab();
                clsPersona clsp = new clsPersona();
                clsp.identificacion = idcliente;
                clsp.nombre = nombre;
                clsp.email = email;
                clsp.telefono = telefono;
                clsp.direccion = direccion;
                clsAccesoDB.IngresoCliente(ref clsp,ref msg);
            cls.clsPersona.id_persona = clsp.id_persona;
            cls.id_doc_cab = idcabecera;
            cls.tipo_doc = "COT";
            cls.cod_documento = coddocumento;
            cls.fecha = fecha.ToShortDateString();
            cls.clsPersona.identificacion = idcliente;
            cls.clsPersona.nombres_completos = nombre;
            cls.sub_total = subtotal;
            cls.descuento = descuento;
            cls.iva = iva;
            cls.total = total;
            clsAccesoDB.IngresoCab(ref cls,ref msg);
            if (cls.error!=string.Empty)
            {
                return cls.error;
            }
            return cls.id_doc_cab.ToString();
        }
        public string GuardarDetalle(int idCab, int idDet, int prod, decimal precio)
        {
            string msg = "ok";
            clsDocumento_det cls = new clsDocumento_det();
            cls.id_doc_cab = idCab;
            cls.id_doc_det = idDet;
            cls.id_producto = prod;
            cls.precio = precio;

            clsAccesoDB.IngresoDet(cls,ref msg);
            return msg;
        }
        [HttpPost]
        public ActionResult Index(clsDocumento_cab cls)
        {
            if (Session["usuario"] == null)
                return this.RedirectToAction("Sesion", "Login");

            int id = cls.id_doc_cab;
            string cod = cls.cod_documento;
            cls = new clsDocumento_cab();
            cls.id_doc_cab = id;
            cls.cod_documento = cod;
            clsPersona clsp = new clsPersona();
            List<clsPersona> lstP = new List<clsPersona>();
            try
            {
                if(cls.id_doc_cab!=0)
                    cls = clsAccesoDB.ConsultaCabecera(cls.id_doc_cab).First();
                else
                    if (cls.cod_documento!="")
                        cls = clsAccesoDB.ConsultaCabecera(0,cls.cod_documento).First();

                    lstP = clsAccesoDB.ConsultaPersona();
                    clsp = lstP.Where(q => q.id_persona == cls.clsPersona.id_persona).First();
                    cls.lstProd = clsAccesoDB.ConsultaProducto().Where(q => q.estado != "I").ToList();
                    cls.JScombo = clsConfiguracion.JsonString(clsAccesoDB.ConsultaProductoCombo(), true);
                    cls.lstPersona = lstP;
                
                cls.clsPersona = clsp;
                //cls.clsPersona.nombres_completos = clsp.nombres_completos;
                //cls.clsPersona.identificacion = clsp.identificacion;
                //cls.clsPersona.email = clsp.email;
                //cls.clsPersona.telefono = clsp.telefono;
                //cls.clsPersona.direccion = clsp.direccion;

                cls.JSlstDet = clsConfiguracion.JsonString(clsAccesoDB.ConsultaDetalle(cls.id_doc_cab));
            }catch (Exception){
                cls.error = "Seprodujo un Error o No existe el Documento con Id: " + cls.id_doc_cab.ToString();
                lstP = clsAccesoDB.ConsultaPersona();
                cls.lstPersona = lstP;
                cls.lstProd = clsAccesoDB.ConsultaProducto().Where(q => q.estado != "I").ToList();
                cls.JScombo = clsConfiguracion.JsonString(clsAccesoDB.ConsultaProductoCombo(), true);
            }
            return View(cls);
        } 
        public ActionResult Eliminar(Array s)
        {
            clsDocumento_det cls = new clsDocumento_det();
            return View(cls);
        }

        public string ConsultaCliente(string identificacion)
        {
            //return Json(clsAccesoDB.ConsultaPersona(0, identificacion).First());
            return clsConfiguracion.JsonString(clsAccesoDB.ConsultaPersona(0, identificacion), true);
        }

    }
}
